package br.com.repositorio;

import java.security.MessageDigest;
import java.util.List;

import br.com.dao.Dao;
import br.com.entidade.Funcionario;
import br.com.util.Constantes;

public class RepositorioFuncionario {

	public Funcionario buscarFuncionarioPorId(Long id) {
		try {
			return (Funcionario) Dao.getInstance().buscarPorId(
					Funcionario.class, id);
		} catch (Exception e) {
			return null;
		}
	}

	public List<Funcionario> listarFuncionariosPorNome(String nome) {
		try {
			return (List<Funcionario>) Dao.getInstance().buscarPorLike("nome",
					nome, Funcionario.class);
		} catch (Exception e) {
			return null;
		}
	}

	public Funcionario buscarFuncionariosPorCPF(String cpf) {
		try {
			return (Funcionario) Dao
					.getInstance()
					.buscarPorValorDeColunaString(Funcionario.class, cpf, "cpf");
		} catch (Exception e) {
			return null;
		}
	}

	public List<Funcionario> listarFuncionarios() {
		try {
			return (List<Funcionario>) Dao.getInstance().listarObjetos(
					Funcionario.class);
		} catch (Exception e) {
			return null;
		}
	}

	public Funcionario autenticarFuncionario(String cpf, String senha) {
		try {
			MessageDigest msg;
			String cript = null;
			try {
				msg = MessageDigest.getInstance("SHA-256");
				byte msgDigest[] = msg.digest(senha.getBytes("UTF-8"));

				StringBuilder hexString = new StringBuilder();
				for (byte b : msgDigest) {
					hexString.append(String.format("%02X", 0xFF & b));
				}
				cript = hexString.toString();

			} catch (Exception e) {
				e.printStackTrace();
			}

			return (Funcionario) Dao.getInstance().autenticarFuncionario(cpf,
					cript);
		} catch (Exception e) {
			return null;
		}
	}

	/*
	 * public void cadastrarFuncionario(Funcionario funcionario) { try{
	 * funcionario.setStatus(Constantes.ATIVO);
	 * Dao.getInstance().salvarObjeto(funcionario); }catch(Exception e){
	 * e.printStackTrace(); } }
	 */

	public void cadastrarFuncionario(Funcionario funcionario) {
		try {
			funcionario.setStatus(Constantes.ATIVO);
			Dao.getInstance().salvarObjeto(funcionario);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void deletarFuncionario(Long id) {
		try {
			Funcionario funcionario = (Funcionario) Dao.getInstance()
					.buscarPorChaveUnicaLong(Funcionario.class, id, "id");
			if (funcionario.getNivelDeAcesso() != 99) {
				Dao.getInstance().deletarObjeto(funcionario);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void atualizarFuncionario(Funcionario funcionario) {
		try {
			Dao.getInstance().atualizarObjeto(funcionario);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
